package com.test.tong.proxy;

import com.sun.scenario.effect.impl.sw.sse.SSEBlend_SRC_OUTPeer;
import com.test.tong.proxy.Interface.HelloWorld;
import com.test.tong.proxy.servcie.HelloWorldService;

import javax.sound.midi.Soundbank;
import java.lang.reflect.Proxy;
import java.sql.SQLOutput;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class SayHello {
    public static void main(String[] args) {

        //目标对象
        HelloWorldService target = new HelloWorldService();
        target.sayHello();
        //实际的代理对象,这里很多教程都是用说子类即可，但是会报proxy.$Proxy0 cannot be cast to com xx的错误，就是采用这种方式会报错：HelloWorldService proxy=(HelloWorldService)SayHelloProxy.bind(target);

        HelloWorld proxy = (HelloWorld) SayHelloProxy.bind(target);

        proxy.sayHello();
        //selfHandlerProxy.sayHello();
        //ClassLoader loader = target.getClass().getClassLoader();
        ////实际获得是的是helloWord的interface
        //Class[] interfaces = target.getClass().getInterfaces();


        /*实例化一个代理类，然后利用该代理对象执行器代理的对象的invoke方法。三个参数分别为：
        类加载器，
        目标对象的接口，将代理对象挂载到那个接口下
        实现代理类(使用此代理类中的invoke方法作为实际方法)
        */
        //SayHelloProxy proxySubject = (SayHelloProxy) Proxy.newProxyInstance(target.getClass().getClassLoader(), target.getClass().getInterfaces(),
        //        selfHandlerProxy);

    }
}
